Gtk(Toggle)Button: preserve untouched state flags when updating state.
authorCarlos Garnacho <carlosg@gnome.org>
Sun, 23 Jan 2011 17:04:41 +0000 (18:04 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Sun, 23 Jan 2011 18:34:38 +0000 (19:34 +0100)
Partly fixes bug #640282, noticed by Christian Persch. buttons were
clobbering the insensitive flag when updating their state.

gtk/gtkbutton.c
gtk/gtktogglebutton.c

index baad6ebf29c54d7568c3248223aee0b1280392d5..d038b311ecff4a24bed8c82c6de738afaf897d10 100644 (file)
@@ -2298,7 +2298,7 @@ static void
 gtk_button_update_state (GtkButton *button)
 {
   GtkButtonPrivate *priv = button->priv;
-  GtkStateFlags new_state = 0;
+  GtkStateFlags new_state;
   gboolean depressed;
 
   if (priv->activate_timeout)
@@ -2306,6 +2306,9 @@ gtk_button_update_state (GtkButton *button)
   else
     depressed = priv->in_button && priv->button_down;
 
+  new_state = gtk_widget_get_state_flags (GTK_WIDGET (button)) &
+    ~(GTK_STATE_FLAG_PRELIGHT | GTK_STATE_FLAG_ACTIVE);
+
   if (priv->in_button)
     new_state |= GTK_STATE_FLAG_PRELIGHT;
 
index 43dbd49a9e27a584e4548c42b3fd8c14a717a957..a05d98a9a81be4df2a4277d561f747488575c3fd 100644 (file)
@@ -563,6 +563,11 @@ gtk_toggle_button_update_state (GtkButton *button)
                 "gtk-touchscreen-mode", &touchscreen,
                 NULL);
 
+  new_state = gtk_widget_get_state_flags (GTK_WIDGET (button)) &
+    ~(GTK_STATE_FLAG_INCONSISTENT |
+      GTK_STATE_FLAG_PRELIGHT |
+      GTK_STATE_FLAG_ACTIVE);
+
   if (priv->inconsistent)
     new_state |= GTK_STATE_FLAG_INCONSISTENT;